package cfengMiddleware.server.rabbitmq.producer;

import cfengMiddleware.server.rabbitmq.entity.MessageEntity;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;

import java.util.Objects;

/**
 * @author Cfeng
 * @date 2022/9/22
 * 演示基于Redission实现的 异步消息通信， 这里和rabbitMQ不同，关系简单，但是消费者没有监听机制，需要轮询
 */

@Component
@RequiredArgsConstructor
@Slf4j
public class RedissonTopicPublisher {

    private final RedissonClient redissonClient;

    /**
     * 发送消息，直接使用redissonClient创建RTopic对象，使用该对象就可以进行消息的发布，当然redis的key还是要的
     * @param messageEntity
     */
    public void sendMsg(MessageEntity messageEntity) {
        final String key = "redissonMsgTopicKey";
        try {
            if(!Objects.isNull(messageEntity)) {
                //基于主题的，所以要使用redisson的主题
                RTopic rTopic = redissonClient.getTopic(key);
                //发送消息,这里采用异步的方式发送
                rTopic.publishAsync(messageEntity);
            }
        } catch (Exception e) {
            log.error("Redisson生产者发生异常: {}", e.fillInStackTrace());
        }
    }
}
